feat: user profile panel with hover popover and click-to-expand#456
Merged
wesbillman merged 6 commits intomainfrom May 2, 2026
Merged
feat: user profile panel with hover popover and click-to-expand#456wesbillman merged 6 commits intomainfrom
wesbillman merged 6 commits intomainfrom
Conversation
Adds a side panel for viewing user profiles, triggered by clicking on avatars or author names in message rows and forum post cards. The existing popover now opens on hover with a 300ms delay and closes the popover on click, opening the full profile panel instead. - UserProfilePanel: new side panel component following existing panel patterns (resize, overlay, escape-to-close) - UserProfilePopover: hover-triggered with delay timers, click opens the profile panel via ProfilePanelContext - ProfilePanelContext: lightweight context to avoid deep prop threading - ChannelScreen/ChannelPane: profile panel state management, DM opening callback via useChannelProfilePanel hook - ForumPostCard: avatar and author name now wrapped with popover - Copy-to-clipboard uses sonner toast matching codebase convention Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix E2E test to hover→popover, click→panel (BLOCK 1)
- Hide Message button when viewing own profile (BLOCK 2)
- Add mutual exclusion between thread, agent session, and profile panels (CHANGE 1)
- Consolidate double UserProfilePopover wrappers in ForumPostCard and
MessageRow thread-reply layout to prevent hover flicker (CHANGE 2)
- Add UserProfilePopover to ForumThreadPanel post and reply authors (CHANGE 4)
- Normalize agent pubkey comparison with toLowerCase() (NIT 1)
- Fix tabIndex={-1} → tabIndex={0} on popover trigger (NIT 2)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- In forum contexts where ProfilePanelProvider is absent, click falls through to Radix's default popover toggle instead of no-op (CHANGE 1) - Call event.preventDefault() on click when opening panel to prevent Radix PopoverTrigger from briefly flashing the popover (CHANGE 2) - Clear profilePanelPubkey in the deep-link targetMessageId effect so navigating to a threaded message dismisses the profile panel (CHANGE 3) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Bump avatar from h-20/w-20 (80px) to h-28/w-28 (112px) for both img and initials fallback; scale fallback text from text-xl to text-3xl - Replace custom Message button with shadcn Button (primary variant) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Match the mobile approach — avatar uses aspect-square w-full instead of fixed h-28 w-28, filling the content area with a 1:1 aspect ratio. Fallback initials text scaled to text-5xl proportionally. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The "clicking author name" test expected a Radix popover, but click behavior was changed to open the full profile panel. Updated the test to assert on user-profile-panel visibility instead. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Changed files (12 files, +719 -158)
UserProfilePanel.tsx— new full profile panel componentUserProfilePopover.tsx— hover popover with click-to-panel behaviorProfilePanelContext.tsx— context provider for panel stateuseChannelProfilePanel.ts— hook for panel open/close/resize logicChannelScreen.tsx— wires profile panel state and mutual exclusionChannelPane.tsx— renders profile panel in sidebar slotMessageRow.tsx— wraps avatar/name in popover triggerForumPostCard.tsx— popover in forum post avatarsForumThreadPanel.tsx— popover in forum thread avatarsuseChannelAgentSessions.ts— clears profile state on deep-link navmentions.spec.ts— e2e test for hover-to-popover and click-to-panelcheck-file-sizes.mjs— allowlist for new componentTest plan
pnpm typecheckpassespnpm check(biome + file sizes) passespnpm buildsucceeds🤖 Generated with Claude Code